iT邦幫忙

DAY 12
5

freedos bochs 16位元 組合語言…等系列 第 12

組合語言熱身:debug之B ,CMP JMP比較及跳

  • 分享至 

  • xImage
  •  

IF 判斷句是任何程式語言都有的文法,
組合語言好像不能說沒有,但是好像也有很多一般語言的語法滲入組合語言。
不過,可以用CMP和JMP來做到IF的效果。

IF (True 或 False)
True 做這裏
ELSE
做這裏。

換成組語

CMP
比較後的結果,如果是TRUE 就JMP到那一段位址,做那些事
如果是FALSE, 就JMP到另一段位址,做另外的事

而JUMP的種類還蠻多的。
CMP的語法:
試一下,和mov有點像,

08FA:0100 cmp 1,1
                 ^ Error
08FA:0100 cmp 1,ax
                  ^ Error
08FA:0100 cmp ax,1
08FA:0103

-------------------------------
一般初始時,暫存器為0,
測試一下,

-a 100
08FA:0100 cmp ax,0
08FA:0103 jz 150
08FA:0105 jnz 250
-t,IP=0103
-t, IP=0150
-t, IP=0151

所以 ax,0比較以後, ax是0,所以jz,可以解釋成等於Z(zero)就跳。
如果不信,可以反過來,

08FA:0100 cmp ax,0
08FA:0103 jnz 250
08FA:0107 jz 150
08FA:0109
-t , IP=0103
-t, IP=0107
-t,IP=0150

可以看出jnz 250沒有執行,所以jnz可以解釋成,如果不為0(not zero)就跳。

jb ,jae
測試一下

08FA:0100 cmp ax,2
08FA:0103 jae 200
08FA:0107 jb 150
08FA:0109
-t IP=0103
-t IP=0107
-t IP=0150

由實驗証實,jb 是小於(below)就跳,所以沒有執行到的jae,是大於等於(對above,equal)就跳。

js,jns

08FA:0100 mov ax,-1
08FA:0103 jns 200
08FA:0107 js 150
08FA:0109
-t ,IP=0103
-t ,IP=0107
-t ,IP=0150

js 是有號(sign)就跳,所以沒有執行到的jns,是無號(no sign)就跳。


**小結:**筆者一路下來,試圖打造無痛學組語的環境。透過練習,把一些不適應的感覺慢慢降低。
練習的過程中,可以發現,電腦是很死板的,一個指令一個動作的細化程度,是用慣高階語言的程式員無法體會,試想,編譯過程中,正確的把常用的IF判斷式,按整數比較,有號數比較,字串比較,
翻成對應的JUMP,就是很鎖碎的過程,而最佳化是大家常常提到優化的名詞,如果從這些細化的
JUMP來分析,每種JUMP的指令常度是不太一樣的。用正確及最短的JUMP可以得到優化的效果。


上一篇
組合語言熱身:debug之A,CPU Instructions CPU指令介紹
下一篇
組合語言熱身:debug之C ,字串,SI,DI
系列文
freedos bochs 16位元 組合語言…等17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
ted99tw
iT邦高手 1 級 ‧ 2012-10-06 00:41:03

沙發

CMP/JMP?......愈來愈有年紀後,現在對GMP比較熟一些些....臉紅

看更多先前的回應...收起先前的回應...
SunAllen iT邦研究生 1 級 ‧ 2012-10-06 11:37:09 檢舉

泰大...什麼都看不懂囧

ted99tw iT邦高手 1 級 ‧ 2012-10-06 11:43:11 檢舉

sunallen提到:
泰大...什麼都看不懂

被發現了.....俺最厲害的就是不懂裝懂....

不像太陽大,不懂也說不懂,都讓人沒機會挑骨頭,吼~~~睡覺

SunAllen iT邦研究生 1 級 ‧ 2012-10-06 11:49:40 檢舉

泰大...我的意思是...我什麼都看不懂哭

不是說您啊...說錯話,我先飛毆飛毆飛

ted99tw iT邦高手 1 級 ‧ 2012-10-06 11:53:55 檢舉

sunallen提到:
說錯話,我先飛

以後不用飛,在您的文中多來幾首新詩更是一兼二顧啦 ~~~~ 灑花灑花

0
timloo
iT邦研究生 2 級 ‧ 2012-10-06 21:50:23

ted99tw提到:
愈來愈有年紀後,現在對GMP比較熟一些些....

一直很想更通俗點來講解組語,
顯然,還是力有未逮。

應該會短吧,

比找工作來形容,

比較CMP A廠,B廠,
若是A與B好,就JUMP 跳到該收拾,
若是沒有,就跳到充實自己,等待下一個機會。

記憶體位址,就想成一列一列往下延伸的程式。

ted99tw iT邦高手 1 級 ‧ 2012-10-06 22:05:05 檢舉

其實有時候Tim大自己悠遊地玩組語,小囉囉們自然而然也就跟著徜徉其中了,誰還計較通不通俗呢.....
XD

我要留言

立即登入留言